﻿using System.Collections.Generic;
using System;

namespace SharedTypes
{
    /// <summary>
    /// Интерфейс алгоритма исполнительного файла данных.
    /// </summary>
    public interface IAlgorithm
    {
        /// <summary>
        /// Exe иследуемой сборки.
        /// </summary>
        string ExeName { get; }

        /// <summary>
        /// Имя алгоритма.
        /// </summary>
        string AlgorithmName { get; }

        /// <summary>
        /// Путь к библиотеке, содержащей алгоритм.
        /// </summary>
        string Path { get; }

        /// <summary>
        /// xml описания библиотеки
        /// </summary>
        string FullPathXml { get; }

        TimeSpan TimeElapsed { get; set; }
        /// <summary>
        /// Список адаптируемых параметров.
        /// </summary>
        IDictionary<int, LinkedParameter> Parameters { get; }

        /// <summary>
        /// Количество адаптируемых параметров.
        /// </summary>
        int NumberOfParameters { get; }

        /// <summary>
        /// Запускает процесс исполнительного файла.
        /// </summary>
        /// <param name="parameters">Список применяемых параметров.</param>
        /// <returns>Размер полученого архива.</returns>
        long DoCompression(IDictionary<int, LinkedParameter> parameters);

        /// <summary>
        /// Устанавливает директория, исполнительного файла которой будет выполняться.
        /// </summary>
        /// <param name="path">Абсолютный путь к директории.</param>
        void SetCompressionTarget(string path);

        /// <summary>
        /// Запускает процесс исполнительного файла с параметрами, рекомендуемыми поставщиком
        /// алгоритма исполнительного файла.
        /// </summary>
        /// <param name="parameters">Список применяемых параметров.</param>
        /// <returns>Размер полученного архива.</returns>
        long GetResultWithRecomendedParameters(IDictionary<int, LinkedParameter> parameters);
    }
}
